package com.zbkj.service.service;

import com.zbkj.common.request.WechatShippingConfigRequest;
import com.zbkj.common.request.WechatShippingRequest;
import com.zbkj.common.response.WechatShippingResponse;

/**
 * 微信发货信息管理服务接口
 * +----------------------------------------------------------------------
 * | CRMEB [ CRMEB赋能开发者，助力企业发展 ]
 * +----------------------------------------------------------------------
 * | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
 * +----------------------------------------------------------------------
 * | Licensed CRMEB并不是自由软件，未经许可不能去掉CRMEB相关版权
 * +----------------------------------------------------------------------
 * | Author: CRMEB Team <admin@crmeb.com>
 * +----------------------------------------------------------------------
 */
public interface WechatShippingService {

    /**
     * 上传发货信息到微信
     * @param request 发货信息请求对象
     * @return WechatShippingResponse 响应结果
     */
    WechatShippingResponse uploadShippingInfo(WechatShippingRequest request);

    /**
     * 查询发货状态
     * @param orderKey 订单编号
     * @return WechatShippingResponse 响应结果
     */
    WechatShippingResponse getShippingStatus(String orderKey);

    /**
     * 特殊发货报备
     * @param orderKey 订单编号
     * @return WechatShippingResponse 响应结果
     */
    WechatShippingResponse specialOrderReport(String orderKey);

    /**
     * 获取微信发货配置
     * @return WechatShippingConfigRequest 配置信息
     */
    WechatShippingConfigRequest getShippingConfig();

    /**
     * 更新微信发货配置
     * @param request 配置请求对象
     * @return Boolean 更新结果
     */
    Boolean updateShippingConfig(WechatShippingConfigRequest request);

    /**
     * 检查是否启用微信发货信息管理
     * @return Boolean 是否启用
     */
    Boolean isShippingEnabled();

    /**
     * 根据订单信息构建微信发货请求对象
     * @param orderNo 订单编号
     * @param logisticsType 物流类型：1-快递，2-同城配送，3-虚拟商品
     * @param trackingNo 物流单号
     * @param expressCompany 物流公司编码
     * @param expressName 物流公司名称
     * @return WechatShippingRequest 微信发货请求对象
     */
    WechatShippingRequest buildShippingRequest(String orderNo, Integer logisticsType, 
                                              String trackingNo, String expressCompany, String expressName);

    /**
     * 异步上传发货信息
     * @param request 发货信息请求对象
     */
    void asyncUploadShippingInfo(WechatShippingRequest request);

    /**
     * 重试上传发货信息
     * @param orderKey 订单编号
     * @return Boolean 重试结果
     */
    Boolean retryUploadShippingInfo(String orderKey);
} 